package org.dormi.learn;

import java.util.List;
import java.util.stream.Stream;

import static java.util.stream.Collectors.toList;

/**
 * @author : dormi330
 * @since : 21/12/14
 * <p>
 * Stream很难debug
 * 方法1， 通过peek方法 https://houbb.github.io/2019/02/27/java8-21-lambda-03-test-debug
 * 方法2， idea有个stream debug插件，默认已经集成 https://zhuanlan.zhihu.com/p/86756013
 * 方法3，将一行代码写成多行，则可以断点；或写成一个类
 *
 */
public class StreamDebug {

    public static void main(String[] args) {
        main1();
        main2();
    }

    /**
     * 使用 peek方法
     * peek 的设计初衷就是在流的每个元素恢复运行之前，插入执行一个动作。
     */
    public static void main1() {
        List<Integer> result = Stream.of(2, 3)
            .peek(x -> System.out.println("1 taking from stream: " + x))
            .map(x -> x + 17)
            .peek(x -> System.out.println("2 after map: " + x))
            .filter(x -> x % 2 == 0)
            .peek(x -> System.out.println("3 after filter: " + x))
            .limit(3)
            .peek(x -> System.out.println("4 after limit: " + x))
            .collect(toList());
    }

    public static void main2() {
        List<Integer> result = Stream.of(2, 3, 4, 5)
            .map(x -> x + 17)
            .filter(x -> x % 2 == 0)
            .limit(3)
            .collect(toList());
    }
}
